<?php
/**
 * @package PWE.tools
 * @author Gmax <gmaxfr78@gmail.com>
 * outils de convertion des chaines de caracteres
 */
class tools_convert {
    /**
     * converti une chaine en supprimant les carateres spéciaux
     * @param string $str
     * @return string
     */
    public static function slug($str){
        $str = stripslashes($str);
        $str = mb_strtolower($str,'UTF-8');
        $search = explode ('-',"é-è-ê-ë-à-â-ä-î-ï-û-ù-ü-ô-ö-ç- -,-;-:-\\-%");
	$replace = explode('-','e-e-e-e-a-a-a-i-i-u-u-u-o-o-c-_----------');
        $str = str_replace($search, $replace, $str);
        
        $str = str_replace(array('.','*','#','?','!','[',']',"'",'&#039','&039'), '', $str);
        $str = str_replace(array("'",'&#039','&039','_'), '-', $str);
        return $str;
    }
    /**
     * converti un datetime en date lisible
     * @param string $str
     * @param boolean $letterMonth : option pour le mois en toute lettre
     * @return string
     */
    public static function date($str,$letterMonth = false,$sep='/'){
        list($date) = explode(' ',$str,2);
        list($an,$mois,$jour) = explode('-',$date,3);
        
        if($letterMonth){
            $retour = $jour.' '.tools_convert::getMois($mois).' '.$an;
        }else{
            $retour = $jour.$sep.$mois.$sep.$an;
        }
        return $retour;
    }
    
    /**
     * converti une chaine en date compatible sql
     * @param string $str
     * @param string $sep
     * @return string
     */
    public static function sqlDate($str,$sep='/'){
        list($jour,$mois,$an) = explode($sep,$str,3);
        return $an.'-'.$mois.'-'.$jour;
    }
    
    public static function date_iso8601($date){
        $datetime = new DateTime($date);
        return $datetime->format(DateTime::ISO8601);
    }


    public static function cleanString($str){
        return preg_replace('@<[^>]*>@i', "", trim(strip_tags($str)));
    }
    /**
     * renvoi le timestamp d'une date sql avec ajout selon la valeur de $addDate Y-m-d-H-i-s
     * @param string $date format sql datetime
     * @param string $addDate
     * @return int
     */
    public static function unix_timestamp($date,$addDate='0-0-0-0-0-0'){
	$date = str_replace(array(' ', ':'), '-', $date);
	$c    = explode('-', $date);
	$c    = array_pad($c, 6, 0);
	array_walk($c, 'intval');
        
	$a = explode('-', $addDate);
	$a = array_pad($a, 6, 0);
	array_walk($a, 'intval');
        
	return mktime($c[3]+$a[3], $c[4]+$a[4], $c[5]+$a[5], $c[1]+$a[1], $c[2]+$a[2], $c[0]+$a[0]);
    }
    /**
     * retourne le mois en toute lettre en fonction de $mois [1-12]
     * @param int $mois
     * @return string
     */
    public static function getMois($mois){
        $dataMatch = array('janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre');
        $idx = $mois-1;
        return $dataMatch[$idx];
    }
    /**
     * renvoi le numéro de moi
     * @param string $mois
     * @return string
     */
    public static function getNumMois($mois){
        $dataMatch = array('janvier'=>'01','février'=>'02','mars'=>'03','avril'=>'04','mai'=>'05','juin'=>'06','juillet'=>'07','août'=>'08','septembre'=>'09','octobre'=>'10','novembre'=>'11','décembre'=>'12');
        return $dataMatch[$mois];
    }
    /**
     * retourne le jour en français depuis l'abreviation anglaise date('D')
     * @param string $jour
     * @return string
     */
    public static function getJour($jour){
        $dataMatch = array('mon'=>'lundi','tue'=>'mardi','wen'=>'mercredi','thu'=>'jeudi','fri'=>'vendredi','sat'=>'samedi','sun'=>'dimanche');
        return $dataMatch[$jour];
    }
}

?>